package logic_setting_role

import (
	v1 "Sailor/app/Sailor-console-server/api/api_setting_role/v1"
	"Sailor/app/Sailor-console-server/internal/dao"
	"Sailor/app/Sailor-console-server/internal/model/entity"
	"Sailor/app/Sailor-console-server/utility/utility_menu"
	"context"
	"github.com/gogf/gf/v2/errors/gerror"
	"github.com/gogf/gf/v2/frame/g"
)

func (s *sSettingRole) LogicSettingRolePermissionList(ctx context.Context, req *v1.SettingRolePermissionListReq) (res *v1.SettingRolePermissionListRes, err error) {

	roleMenus, err := dao.SysRoleMenu.Ctx(ctx).Where(dao.SysRoleMenu.Columns().RoleCode, req.RoleCode).Fields(dao.SysRoleMenu.Columns().MenuId).Array()
	if err != nil {
		g.Log().Error(ctx, err)
		return nil, gerror.New("查询权限列表失败")
	}

	roleApisArray, err := dao.CasbinRule.Ctx(ctx).Where(dao.CasbinRule.Columns().V0, req.RoleCode).Fields(dao.CasbinRule.Columns().V1).Array()
	if err != nil {
		g.Log().Error(ctx, err)
		return nil, gerror.New("查询权限列表失败")
	}

	roleApis, err := dao.SysApi.Ctx(ctx).Where(dao.SysApi.Columns().ApiPath, roleApisArray).Array()
	if err != nil {
		g.Log().Error(ctx, err)
		return nil, gerror.New("查询权限列表失败")
	}

	var menus []entity.SysMenu
	err = dao.SysMenu.Ctx(ctx).With(entity.SysMenu{}).
		Where(dao.SysMenu.Columns().MenuParentId, "").
		OrderAsc(dao.SysMenu.Columns().MenuSort).Scan(&menus)
	if err != nil {
		g.Log().Error(ctx, err)
		return nil, gerror.New("查询权限列表失败")
	}

	var allApi []entity.SysApi
	err = dao.SysApi.Ctx(ctx).Scan(&allApi)
	if err != nil {
		g.Log().Error(ctx, err)
		return nil, gerror.New("查询权限列表失败")
	}

	return &v1.SettingRolePermissionListRes{
		AuthMenu: roleMenus,
		AuthApi:  roleApis,
		AllMenu:  utility_menu.MenuFormat(menus),
		AllApi:   allApi,
	}, nil
}
